﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace  RzCorportativo.Views
{
    public partial class Medico : System.Web.UI.UserControl
    {
        private List<string> errors = new List<string>();
        public bool SoAtivos { get; set; }

        public RzCorportativo.Lib.Medico Model
        {
            get
            {
                this.errors.Clear();
                RzCorportativo.Lib.Medico item = new RzCorportativo.Lib.Medico();
                item.Pessoa = this.Paciente.Model;
                if (!this.Paciente.IsValid)
                    this.errors.AddRange(this.Paciente.GetErrors());
                item.CRM = this.CRM.Text;
                if (string.IsNullOrEmpty(this.CRM.Text))
                    this.errors.Add("CRM inválido");
                item.Especialidade = EFramework.Web.TypeExtension.ShortExtension.Parse(Especialidade.Text, 0);
                if (0.Equals(item.Especialidade))
                    errors.Add("Especialidade inválida");
                item.MedicoId = EFramework.Web.TypeExtension.IntExtension.Parse(MedicoId.Text, 0);
                item.PessoaId = item.Pessoa != null ? item.Pessoa.UsuarioId : 0;
                return item;
            }
        }

        public List<string> GetErrors()
        {
            return this.errors;
        }

        public bool IsValid
        {
            get
            {
                return this.errors.Count == 0;
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (this.IsPostBack)
                return;
            this.Especialidade.DataTextField = "Descricao";
            this.Especialidade.DataValueField = "EspecialidadeId";
            var esp = new RzCorportativo.Lib.Especialidade();
            if(this.SoAtivos)
                esp.Status = SoAtivos;
            var lista = RzCorportativo.Lib.Especialidade.Listar(esp);
            lista.Insert(0, new RzCorportativo.Lib.Especialidade()
            {
                EspecialidadeId = 0,
                Descricao = "Especialidade"
            });
            this.Especialidade.DataSource = lista;
            this.Especialidade.DataBind();
        }

        internal void LoadModel(RzCorportativo.Lib.Medico medico)
        {
            if (medico == null || medico.MedicoId == 0)
                return;
            medico = RzCorportativo.Lib.Medico.CreateInstace(medico.MedicoId);
            if (medico == null)
                return;
            this.MedicoId.Text = medico.MedicoId.ToString();
            this.CRM.Text = medico.CRM;
            this.Especialidade.SelectedValue = medico.Especialidade.ToString();
            this.Paciente.LoadModel(medico.Pessoa, true);
        }
    }
}